#ifndef RTWEEKEND_H
#define RTWEEKEND_H

#include <cmath>
#include <iostream>
#include <limits>
#include <memory>
#include "color.h"
#include "ray.h"
#include "vec3.h"

// C++ Std Usings

// Constants

extern const double infinity;
extern const double pi;

// Utility Functions

extern double degrees_to_radians(double degrees);
extern double random_double();// [0,1]随机数
extern double random_double(double min, double max);// [min,max]随机数
extern int random_int(int min, int max);
extern vec3 random_unit_vector();// 随机单位向量
extern vec3 random_on_hemisphere(const vec3& normal);// 半球随机单位向量
extern vec3 reflect(const vec3& v, const vec3& n);
extern vec3 refract(const vec3& r, const vec3& n, double etai_over_etat);
extern vec3 random_in_unit_disk();
extern vec3 random_cosine_direction();

#endif